package com.heather.exam.until;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;

public class DateTimeUtils {

    // 定义通用的日期时间格式
    private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    // 定义日期格式
    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");

    /**
     * 将字符串类型的日期时间转换为LocalDateTime对象
     *
     * @param dateTimeStr 字符串格式的日期时间，例如："2024-03-25 10:30:45"
     * @return 转换后的LocalDateTime对象
     */
    public static LocalDateTime parseDateTime(String dateTimeStr) {
        return LocalDateTime.parse(dateTimeStr, DATE_TIME_FORMATTER);
    }

    /**
     * 将字符串类型的日期转换为LocalDate对象
     *
     * @param dateStr 字符串格式的日期，例如："2024-03-25"
     * @return 转换后的LocalDate对象
     */
    public static LocalDate parseDate(String dateStr) {
        return LocalDate.parse(dateStr, DATE_FORMATTER);
    }

    /**
     * 获取当前日期和时间
     *
     * @return 当前日期时间的LocalDateTime对象
     */
    public static LocalDateTime getCurrentDateTime() {
        return LocalDateTime.now();
    }

    /**
     * 获取当前日期的字符串表示
     *
     * @return 当前日期的字符串，例如："2024-03-25"
     */
    public static String getCurrentDateString() {
        return LocalDate.now().format(DATE_FORMATTER);
    }

    /**
     * 获取当前日期和时间的字符串表示
     *
     * @return 当前日期时间的字符串，例如："2024-03-25 10:30:45"
     */
    public static String getCurrentDateTimeString() {
        return LocalDateTime.now().format(DATE_TIME_FORMATTER);
    }

    /**
     * 比较两个日期时间之间的差值，单位为分钟
     *
     * @param dateTime1 第一个日期时间对象
     * @param dateTime2 第二个日期时间对象
     * @return 两者之间的时间差，以分钟为单位
     */
    public static long getTimeDifferenceInMinutes(LocalDateTime dateTime1, LocalDateTime dateTime2) {
        return ChronoUnit.MINUTES.between(dateTime1, dateTime2);
    }

    /**
     * 将日期时间转换为字符串
     *
     * @param dateTime 日期时间对象
     * @return 字符串格式的日期时间
     */
    public static String dateTimeToString(LocalDateTime dateTime) {
        return dateTime.format(DATE_TIME_FORMATTER);
    }

    /**
     * 将日期转换为字符串
     *
     * @param date 日期对象
     * @return 字符串格式的日期
     */
    public static String dateToString(LocalDate date) {
        return date.format(DATE_FORMATTER);
    }
}
